﻿package fwk.siteManager2.interfaces {	
	
	
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import fwk.loaderManager.LoaderItemGroup;
	

	

	
	
	public interface IMainBase
	{
		
		/**
		 * En renseignant une css, les méthodes initTextFromNode et initTextFromString sont utilisables
		 */
		function set css(cssString:String):void
		
		
		//--- desactivation/activation interaction sur le site
		/**
		 * Si à false desactive les actions sur le site
		 */
		function set interactionOn(val:Boolean):void

		function get xmlContentPage():XML

		function get width():Number

		
		function get height():Number

		function setPreviousSwfAdress():void;
		
		/**
		 * Renvoi le xml templates
		 */
		function get xmlTemplates():XML

		/**
		 * Renvoi le xml config
		 */
		function get xmlConfig():XML

		/**
		 * Renvoi le deepLink demandé pour l'afficher lorsque qu'on arrive sur le site 
		 */
		function get firstDeepLinkToGo():String

		function set firstDeepLinkToGo(val:String):void
		

		/**
		 * Renvoi le caractère qui sépare les niveaux de deeplink
		 */
		function get splitDeepLink():String

		/**
		 * Renvoi le ITemplate correspondant à la page actuellement affiché, null si aucun
		 */
		function get currentPage():ITemplate

		/**
		 * Renvoi le clip qui contient les pages
		 */
		function get containerPage():Sprite

		/**
		 * Defini le clip qui va contenir les pages. Il n'est pas obligatoire de le définir car un clip est créer automatiquement.
		 */
		function set containerPage(val:Sprite):void

		/**
		 * Renvoi le clip qui contient les pages ainsi que les éléments du site déclaré dans le xml templates dans le noeud structure
		 */
		function get containerSite():Sprite

		function set containerSite(val:Sprite):void

		/**
		 * Renvoi le deeplink en cours
		 */
		function get deepLink():String

		/**
		 * Set le deeplink, ce qui déclenche l'evenement ContainerLoaderEvent.CONTEXT_CHANGE sur le MainBase mais ne fait pas appel à loadAndDisplayPage
		 */
		function set deepLink(val:String):void

		/**
		 * Renvoi le deeplink précédent
		 */
		function get deepLinkPrevious():String

		/**
		 * Renvoi la largeur minimum du site, cette propriété est renseigné dans xml config
		 */
		function get siteWidth():int

		/**
		 * Renvoi la hauteur minimum du site, cette propriété est renseigné dans le xml config
		 */
		function get siteHeight():int
		
		/**
		 * Renvoi le repertoire pays, c'est soit la valeur renseigné dans le xml config du site, soit celle renseigné en flashvars si celle ci est renseigné
		 */
		function get countryPath():String

		/**
		 * Renvoi le repertoire communs, c'est soit la valeur renseigné dans le xml config du site, soit celle renseigné en flashvars si celle ci est renseigné
		 */
		function get sharedPath():String

		/**
		 * Ferme la page qui est cours d'affichage, si aucune page ne fait rien
		 */
		function closePage():void

		/**
		 * Charge et affiche la page correspondant a la chaine deeplink passer en paramètre si elle existe et est décalré dans le xml templates dans le noeud pages
		 * @param	idChaine : Soit un id de page soit une chaine deeplink avec comme premier niveau un id de page
		 * @param	crossTransition : true si l'animation de fermeture de la apge en cours doit se faire en même temps que l'anim d'ouverture de la page à afficher
		 */
		function loadAndDisplayPage(idChaine:String, crossTransition:Boolean = false):void

		/**
		 * Renvoi le clip "Mére" de tout le site qui s'occupe de charger tout. C'est lui aussi qui recoit les flashvars.
		 */
		function get containerLoader():MovieClip;

		
		//----------------------------------------------------------------------
		//	Debug
		//----------------------------------------------------------------------
		/**
		 * Equivalent au trace de flash, mais qui en plus trace sur Alcon (module air) et dans le debuggeur interne à MainBase
		 * @param	str : chaine à tracé
		 * @param	tmpNum
		 */
		function debugIt(str:Object, tmpNum:Number = 1):void

		//----------------------------------------------------------------------
		// Swf address
		//----------------------------------------------------------------------
		/**
		 * Change la chaine affiché dans la barre d'adresse du navigateur après le #
		 * @param	chaine : Chaine a afficher dans la barre d'adresse
		 * @param	title : Chaine à afficher dans barre de titre du navigateur
		 */
		function setSwfAdrress(chaine:String, title:String = ""):void

		/**
		 * Change le titre affiché en haut du navigateur
		 * @param	title : Chaine à afficher dans barre de titre du navigateur
		 */
		function setSwfAdrressTitle(title:String):void

		/**
		 * Renoive la chaine qui est actuellement affiché dans la barre d'adresse du navigateur (chaine après le #) 
		 * @param	title : Chaine à afficher dans la barre de titre du navigateur
		 */
		function getSwfAdress():String

		//----------------------------------------------------------------------
		//	Recup ressources
		//----------------------------------------------------------------------
		/**
		 * Renvoie l'object chargé correspondant à l'id de la ressources déclaré dans le xml config que l'on veux récupéré
		 * @param	id : Correspond à l'id renseigné dans le xml config dans le noeud ressourcesGlobal
		 * @return Un object qui rreprésente la ressources qui a été chargé. Si c'est un swf, il faut la typer MovieClip, si c'est un xml, à typer String, etc...
		 */
		function getRessourceGlobal(id:String):Object


		/**
		 * Renvoie un LoaderItemGroup (voir fwk.loaderManager.LoaderItemGroup) correspondant à un groupe de ressources à chargé pour un id de page donné (déclaré dans le noeud pages du xml templates).
		 * @param	id : id de la page dont on veux obtenir le LoaderItemGroup
		 * @return  LoaderItemGroup : Object de chargement géré par le LoaderManager (voir fwk.loaderManager.LoaderManager)
		 */
		function getLoaderItemPage(id:String):LoaderItemGroup


		/**
		 * Renvoie un LoaderItemGroup (voir fwk.loaderManager.LoaderItemGroup) correspondant à un groupe de ressources à chargé pour un id de ressource donné (déclaré dans le noeud ressources du xml templates).
		 * @param	id : id de la ressources dont on veux obtenir le LoaderItemGroup
		 * @return  LoaderItemGroup : Object de chargement géré par le LoaderManager (voir fwk.loaderManager.LoaderManager)
		 */
		function getLoaderItemRessource(id:String):LoaderItemGroup

		/**
		 * Renvoie le clip correspondant à l'id renseigné dans le xml temapltes dans le noeud structure
		 * @param	id
		 * @return
		 */
		function getClipStructure(id:String):Object


		//----------------------------------------------------------------------
		//	loadRessource indépendante
		//----------------------------------------------------------------------
		/**
		 * Force le chargement d'un goupe de ressource déclaré dans le xml templates
		 * @param	obj : Soit l'id de la ressource à charger (id présent dans le xml templates), soit le LoaderItemGroup correspondant à un groupe de ressources déclaré dans le xml templates dans le noeud ressources, pages ou templates
		 * @return Renvoie le LoaderItemGroup correspondant au groupe de ressources à charger
		 */
		function loadGroupRessource(obj:Object):LoaderItemGroup

		//----------------------------------------------------------------------
		//	Load all in Background
		//----------------------------------------------------------------------
		/**
		 * Ajoute un groupe de ressources correspondant à l'id dans la pile de chargement en background du site
		 * @param	id : Identifiant de la ressource à charger (id présent dans le xml templates)
		 */
		function addInBackgroundLoading(id:String):void

		/**
		 * Déclare en tant que ressources static un groupe de ressources correspondant à l'id. Cela a pour effet de ne pas recharger à chaque fois la ressource en la gardant en cache.
		 * @param	id : Identifiant de la ressource à charger (id présent dans le xml templates)
		 */
		function addToCacheStatic(id:String):void

		/**
		 * Lance le chargemebnt des groupes de ressources présent dans la pile de chargement en background du site
		 */
		function startBackgoundLoading():void

		//----------------------------------------------------------------------
		//	TEXTE
		//----------------------------------------------------------------------
		/**
		 * Cette méthode nécéssite l'utilisation d'une CSS. Il faut renseigné la propriété css de MainBase pour pouvoir utiliser cette méthode.
		 * Initialise un champ texte à partir d'un noeud xml formatté. Le noeud doit être de la forme <node style=".monStyleCss"><![CDATA[MonTexte]]></node>.
		 * @param	mcT : Clip MovieClip contenant un champs text (TextField) nommé tTexte obligatoirement
		 * @param	node : Type XML. Le noeud doit être de la forme <node style=".monStyleCss"><![CDATA[MonTexte]]></node>.
		 * @param	scopeFunction : Référence à un classe qui va recevoir les appel de fonctions event présent dans le champs text. Par exemple <node style=".monStyleCss"><![CDATA[<a href='event:fonction1'>MonTexte</a>]]></node> executera la méthode se nommant "fonction1" sur la référence scopeFunction .
		 */
		function initTextFromNode(mcT:MovieClip, node:XML, scopeFunction:Object = null):void

		/**
		 * Cette méthode nécéssite l'utilisation d'une CSS. Il faut renseigné la propriété css de MainBase pour pouvoir utiliser cette méthode.
		 * Initialise un champ texte à partir d'un texte (String) et un nom de style CSS.
		 * @param	mcT : Clip MovieClip contenant un champs text (TextField) nommé tTexte obligatoirement
		 * @param	text : String à mettre dans le champs texte
		 * @param	className : Un nom du style présent dans la CSS. Il faut mettre le "." devant le nom (ex : ".labelTitle" )
		 * @param	scopeFunction : Référence à un classe qui va recevoir les appel de fonctions event présent dans le champs text. Par exemple <node style=".monStyleCss"><![CDATA[<a href='event:fonction1'>MonTexte</a>]]></node> executera la méthode se nommant "fonction1" sur la référence scopeFunction .
		 */
		function initTextFromString(mcT:MovieClip, text:String, className:String, scopeFunction:Object = null, fontSizeOffset:Number = 0):void

		
		//----------------------------------------------------------------------
		//	Gestion listener
		//----------------------------------------------------------------------
		function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

		
		function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

	}
	
}
		